﻿/// <reference path="../jquery-1.10.2.js" />
/// <reference path="JQExtend.js" />
/// <reference path="JQAjax.js" />

var JQForm = function (form, config) {
    /// <summary>JQForm对象的构造方法</summary>
    /// <param name="form" type="String[id]/JQObject">form对象，可以是ID，也可以是form的jqObject</param>
    /// <param name="config" type="JSON">配置参数，通过此参数可以更改所有的默认处理方式</param>
    this.config = {};
    $.extend(true, this.config, JQForm.defaultConfig);
    $.extend(true, this.config, config);
    //获取form对象
    this.el = $.getJQObj(form);
};

$.extend(JQForm.prototype, {
    save: function () {
        /// <summary>form的保存方法</summary>
        var bResult = this.config.events.beforeSave.call(this);
        if (typeof (bResult) === "undefined" || bResult.toString() != 'false') {
            var fVal = this.config.serialize(this.el);
            JQAjax.callServer(this.config.postUrl, fVal, this.config.async, 'post', function (sPostBack, formObj) {
                /// <summary>调用ajax方法的回调方法</summary>
                /// <param name="sPostBack" type="String">服务器返回的数据</param>
                /// <param name="formObj" type="Object">JQForm对象</param>
                formObj.config.events.saved.call(formObj, sPostBack);
            }, this);
        }
    }
});

//默认的配置参数
JQForm.defaultConfig = {
    async: true, //是否异步，默认异步
    //保存数据的服务器Url
    postUrl: MyWebsite.getServerAddr() + "Common/Agents/FormSave.ashx",
    serialize: function (form) {
        /// <summary>格式化数据到服务器端的方法，客户端可以自己定义格式化和发格式化的方法（还需要自己定义服务器的处理方法）</summary>
        return $.getJQObj(form).serialize()
    },
    unSerialize: function () { 
        
    },
    //事件列表
    events: {
        saved: $.noop, //保存之后回调的方法
        beforeSave: $.noop //保存之前回调的方法（如果返回false，则不再执行保存方法了）
    }
};
